﻿יצירת פעולה
===============

לאחר שיש ברשותנו מודל, אנו יכולים להתחיל לכתוב לוגיקה שיכולה לתפעל את המודל. אנו כותבים את הלוגיקה הזו בתוך פעולה בקונטרולר. עבור דוגמאת טופס ההתחברות, הקוד הבא הכרחי:

~~~
[php]
public function actionLogin()
{
    $model=new LoginForm;
    if(isset($_POST['LoginForm']))
    {
        // אוסף את הקלט של המשתמש
        $model-»attributes=$_POST['LoginForm'];
        // מאמת את הקלט של המשתמש במידה והכל עבר בהצלחה המשתמש יועבר לעמוד הקודם
        if($model-»validate())
            $this-»redirect(Yii::app()-»user-»returnUrl);
    }
    // הצג את טופס ההתחברות
    $this-»render('login',array('model'=»$model));
}
~~~

בקוד למעלה, אנו קודם יוצרים אובייקט של המודל `LoginForm`; במידה והבקשה הינה בקשת POST (שבעצם אומר שהטופס נשלח), אנו מאכלסים את `model$` עם הנתונים שהגיעו דרך

~~~

$_POST['LoginForm']

~~~

לאחר מכן אנו מאמתים את הנתונים ובמידה והכל עבר בהצלחה, מעבירים את המשתמש לעמוד הקודם בו הוא היה צריך להתחבר. במידה וההתחברות נכשלת, או המשתמש רואה את הטופס בפעם הראשונה, אנו מציגים לו את קובץ התצוגה `login` שתוכנו יתואר בחלק הבא.

» Tip|טיפ: בפעולת ה `login`, אנו משתמשים ב `Yii::app()-»user-»returnUrl` בכדי לקבל את הקישור של העמוד הקודם בו המשתמש היה צריך להתחבר. הרכיב `Yii::app()-»user` הוא מסוג [CWebUser] (או מחלקות היורשות ממנו) המייצג מידע אודות המשתמש (לדוגמא שם משתמש, סטטוס). למידע נוסף יש לקרוא אודות [אימות משתמשים וניהול גישות](/doc/guide/topics.auth).

בו נתייחס לביטוי הבא המופיע בפעולת ה `login` למעלה:

~~~
[php]
$model-»attributes=$_POST['LoginForm'];
~~~

כפי שכבר הסברנו [באבטחת הצבת מאפיינים](/doc/guide/form.model#securing-attribute-assignments), שורת קוד זו מאכלסת את המודל עם הקלט שהגיע מהמשתמש. המאפיין `attributes` מוגדר על ידי [CModel] המצפה למערך של מפתחות וערכים, ומגדירה כל אחד מהערכים למאפיין המתאים לו במודל. לכן

~~~
$_POST['LoginForm']
~~~

מספק לנו מערך זה, הקוד למעלה יכול להיות זהה לקוד הארוך הבא (בהנחה שכל מאפיין נוכח במערך):

~~~
[php]
$model-»username=$_POST['LoginForm']['username'];
$model-»password=$_POST['LoginForm']['password'];
$model-»rememberMe=$_POST['LoginForm']['rememberMe'];
~~~

» Note|הערה: בכדי לאפשר ל


» ~~~
» $_POST['LoginForm']
» ~~~ 

» לספק לנו מערך במקום סטרינג, אנו דבקים במוסכמות של מתן שמות מתאימים למאפיינים של מודל בטופס. במיוחד, עבור שדה טקסט בשם המאופיין בעזרת המאפיין `a` של המחלקה `C`, אנו נקרא לו `C[a]`. לדוגמא, אנו נשתמש ב `LoginForm[username]` בכדי לתת שם לשדה טקסט המקושר למאפיין `username` במודל.

כל מה שנותר לעשות הוא ליצור את קובץ התצוגה `login` שאמור להכיל טופס HTML עם שדות הקלט הדרושים.

«div class="revision"»$Id: form.action.txt 1837 2010-02-24 22:49:51Z qiang.xue $«/div»